import axios from 'axios'

import { Dialog } from 'vant';

const codeMessage = {
  200: '服务器成功返回请求的数据。',
  201: '新建或修改数据成功。',
  202: '一个请求已经进入后台排队（异步任务）。',
  204: '删除数据成功。',
  400: '发出的请求有错误，服务器没有进行新建或修改数据的操作。',
  401: '用户没有权限（令牌、用户名、密码错误）。',
  403: '用户得到授权，但是访问是被禁止的。',
  404: '发出的请求针对的是不存在的记录，服务器没有进行操作。',
  406: '请求的格式不可得。',
  410: '请求的资源被永久删除，且不会再得到的。',
  422: '当创建一个对象时，发生一个验证错误。',
  500: '服务器发生错误，请检查服务器。',
  502: '网关错误。',
  503: '服务不可用，服务器暂时过载或维护。',
  504: '网关超时。'
}

// 创建axios实例
const service = axios.create({
  // baseURL: 'https://violin.kyshh.com/', // api的base_url
  // baseURL: 'http://127.0.0.1:8000/', // 本地测试api  
  baseURL: 'https://epioneer.info/', // 服务器测试api  
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },
  timeout: 5000 // 请求超时时间
})

function request(api, callBack) {
  return new Promise((resolve, reject) => {
    console.log('api', api)
    service({
      url: api.url,
      method: api.method,
      data: api.inputData
    })
      .then(resData => {
        var res = resData.data
        console.log('res', res)
        if (res.code === 0) {
          var resOk = false
          var resKey = Object.keys(res)
          for (var key in api.resData) {
            resOk = false
            if (resKey.indexOf(key) < 0) {
              console.log('API Error: ' + api.url + '  : no param ' + key)
              var message = 'API返回参数错误:' + api.url + '  : no param ' + key
              Dialog.alert({
                message,
              }).then(() => {
                // on close
              });
              // mint ui 中的方法
              // MessageBox.confirm('API返回参数错误:' + api.url + '  : no param ' + key, '确定登出', {
              //   confirmButtonText: '确定',
              //   cancelButtonText: '取消',
              //   type: 'warning'
              // })
              console.log(res)
              // reject(error)
              break
            } else {
              api.resData[key] = res[key]
              resOk = true
            }
          }
          if (resOk) {
            callBack(api.resData)
            resolve()
          }
        } else {
          resKey = Object.keys(res)
          // console.log("resKey",resKey)
          for (key in resKey) {
            api.resData[resKey[key]] = res[resKey[key]]
          }
          callBack(api.resData)
          resolve()
        }
      })
      .catch(error => {
        // TODO 统一处理http请求错误
        console.log(error)
        const errorText = codeMessage[error.response.status]
        var message = 'API返回参数错误:' + api.url + '  : ' + errorText
        Dialog.alert({
          message,
        }).then(() => {
          // on close
        });
        // MessageBox.confirm('API返回参数错误:' + api.url + '  : ' + errorText, {
        //   confirmButtonText: '确定',
        //   cancelButtonText: '取消',
        //   type: 'warning'
        // })
        reject(error)
      })
  })
}

export default request
